1 Contenido de la clase
Repaso: resolución, cláusulas y la negación [00:00-07:00]
Se repasa la resolución sobre cláusulas: la negación se mantiene fuera, se factoriza, y los literales positivos y negativos que coinciden se van cancelando hasta llegar a la contradicción [00:55-01:28]. En la práctica se niega la meta y se buscan los literales opuestos [01:13-01:28]. La coma se comporta como un operador (la conjunción) que proviene de la distribución [06:17-06:37]. El audio de este tramo es muy ruidoso e ininteligible en varios pasajes: [parte no entendida].
Implementaciones y entornos de Prolog [01:58-03:20]
Se repasan las implementaciones del lenguaje: SWI-Prolog, Visual Prolog y GNU Prolog [02:02-02:16]. Visual Prolog sirve para hacer aplicaciones visuales (ventanas, botones, componentes) [02:08-03:02]. Algunas implementaciones no traen un editor como tal: el programa se guarda en un archivo con extensión .pl y se carga con el consult [03:10-03:20]; otras se pueden compilar [03:30-03:38]. Al consultar, el entorno informa de los predicados disponibles y el programa queda listo para recibir preguntas [03:36-03:42].
Predicados, términos y los programas de ejemplo (Proposiciones y MariaGusta) [07:35-08:21, 20:00-28:00]
Con Prolog ya se pueden representar personas y cosas, no solo proposiciones abstractas [07:44-07:53]. Aparecen los predicados con términos, por ejemplo da(jaime, regalo, maria) ("Jaime le da un regalo a María") y recibe(maria, regalo) ("María recibe un regalo") [07:53-08:17]. Los hechos son los datos que forman la base y las reglas permiten deducir relaciones nuevas a partir de ellos [08:09-08:19]. Con esto se formulan preguntas con variables: ¿a quién le da un regalo María?, ¿qué le gusta a María? [20:00-20:26, 26:27-27:15]. En el programa MariaGusta se pregunta qué le gusta a María y Prolog va probando los hechos (helado, cine…) [26:09-27:15]. Se insiste en que, para demostrar, se niega la meta y se buscan las combinaciones que producen la contradicción; la máquina prueba todas las opciones posibles [27:19-28:26]. También aparece el ejemplo de recibe un beso (da(juan, un beso, alguien)) como otra relación entre términos [42:55-43:19].
Unificación: variables y constantes [20:26-22:30, 60:00-61:30]
La unificación decide qué términos se pueden igualar. Una constante se unifica con otra constante igual: la letra A con la A; números con números (4 con 4) [21:52-22:00, 60:00-60:13]. Una variable se unifica con cualquier valor, y la sustitución la liga a ese valor (X = 5, X = 4, X = a) [20:27-20:35, 60:11-60:20]. Las variables que se usan en una consulta son locales y temporales: existen durante la ejecución y desaparecen al terminar; no hay variables globales [28:28-29:02]. [parte no entendida — detalles del ejemplo de unificación paso a paso].
El problema de la Zebra [40:00-42:00]
Se presenta el clásico problema de la Zebra: hay cinco casas con nacionalidades, colores y otras características, y la pregunta es quién tiene la cebra y quién bebe agua [40:30-41:00]. Se resuelve planteando las restricciones como reglas y hechos (por ejemplo, "los noruegos viven al lado de la casa azul") y dejando que Prolog pruebe todas las combinaciones hasta encontrar la solución [40:30-41:40]. No es una fórmula matemática sino una demostración por combinaciones [41:00-41:26]. En la conferencia se indica el programa Zebra.pl.
Listas y aritmética [44:20-49:30, 60:55-61:30]
Se avanza hacia problemas más elaborados con listas y aritmética [44:42-45:05]. En aritmética, Prolog no tiene "la suma" como función: hay que definirla o usar los predicados aritméticos (por ejemplo el operador plus, plus 3 2) [46:57-47:23]. Se puede preguntar qué valor hay que sumar a 5 para obtener 8, y Prolog responde ligando la variable [47:49-47:57]. También se puede sobrecargar un predicado: el mismo nombre plus con distinto número de argumentos (plus de 3, plus de 4 argumentos) [60:55-61:15]; el dominio del problema decide cuándo una sobrecarga es válida [61:15-61:33]. El detalle del manejo de listas es ruidoso en el audio: [parte no entendida].
Base de conocimiento dinámica: assert / retract y sistemas expertos [61:45-63:50]
Prolog permite modificar la base de conocimiento en tiempo de ejecución: se pueden añadir hechos (assert) y quitar hechos (retract) [61:45-62:24]. Esto da lugar a los sistemas expertos que aprenden: si al programa le falta un conocimiento, se le puede enseñar un hecho nuevo y, a partir de ahí, responderá preguntas que antes no podía [62:12-62:54]. Ejemplo: si se descubre que a Mario le gusta algo, se guarda ese hecho y la próxima consulta lo devuelve [63:20-63:33]. En las versiones compiladas esto no es tan directo, porque el código queda fijo [62:26-62:34].
2 Puntos destacados / Lo que hay que saber
.pl, consult y compilación [01:58-03:38].da(jaime, regalo, maria), recibe(maria, regalo); los hechos forman la base y las reglas deducen [07:53-08:19].plus, plus 3 2) [46:57-47:23].plus con distinto número de argumentos [60:55-61:15].assert / retract): añadir/quitar hechos en ejecución → sistemas expertos que aprenden [61:45-63:50].3 Actividades y tareas pendientes
4 Dudas que podrían examinar
¿Cómo se unifica una constante y una variable?
Una constante se unifica con otra constante igual (números con números, la letra A con la A); una variable se unifica con cualquier valor y la sustitución la liga [21:52-22:00, 60:00-60:20].
¿Qué diferencia hay entre constante y variable al unificar?
Las constantes solo unifican con constantes iguales; la variable unifica con cualquier término y queda ligada por la sustitución [60:00-60:20].
¿Por qué las variables son locales?
Porque existen solo durante la ejecución de la consulta y desaparecen al terminar; no hay variables globales [28:28-29:02].
¿Cómo se resuelve el problema de la Zebra?
Planteando las pistas como reglas y hechos y dejando que Prolog pruebe todas las combinaciones hasta llegar a la solución [40:30-41:40].
¿Prolog tiene una función de suma?
No; no existe "la suma" como función: hay que definirla o usar los predicados/operadores aritméticos como plus [46:57-47:23].
¿Qué es sobrecargar un predicado?
Definir el mismo nombre (p. ej. plus) con distinto número de argumentos; el dominio del problema decide cuándo es válido [60:55-61:33].
¿Qué es la base de conocimiento dinámica?
Poder añadir (assert) y quitar (retract) hechos en tiempo de ejecución, lo que permite que el programa "aprenda" [61:45-62:24].
¿Qué es un sistema experto que aprende?
Un programa con una base de conocimiento que se amplía cuando se le enseña un hecho nuevo y así responde preguntas que antes no podía [62:12-63:33].
5 Sitios o recursos para visitar
El entorno Prolog de referencia, mencionado en clase. · swi-prolog.org
Implementación orientada a aplicaciones visuales. · visual-prolog.com
Implementación libre de Prolog. · gprolog.org
El lenguaje de la programación lógica. · es.wikipedia.org
El mecanismo de igualación de términos en lógica. · es.wikipedia.org
El acertijo de las cinco casas (Einstein). · es.wikipedia.org
Programas que razonan sobre una base de conocimiento. · es.wikipedia.org
Añadir y quitar hechos de la base de conocimiento. · google.com
6 Glosario de términos
- Resolución: regla de inferencia para la demostración automática; con variables y constantes sigue aplicándose igual.
- Negación (de la meta): al demostrar se niega lo que se quiere probar y se busca la contradicción.
- Predicado: relación entre términos con valor de verdad (p. ej.
da(jaime, regalo, maria)). - Término: cada uno de los objetos, constantes o variables que aparecen como argumentos de un predicado.
- Hecho: cláusula sin cuerpo que forma parte de la base de conocimiento.
- Regla: cláusula que permite deducir algo a partir de hechos u otras reglas.
- Unificación: proceso de igualar términos; operación clave al aplicar la resolución.
- Sustitución: reemplazo de una variable por el término con el que se unificó (la liga).
- Constante: objeto fijo que solo se unifica con otra constante igual.
- Variable: término comodín que se unifica con cualquier valor y queda ligado; es local/temporal en la consulta.
- Lista: secuencia de términos o de listas separados por comas y delimitados por corchetes; el orden importa.
- Aritmética en Prolog: no hay "la suma" como función; se usan/definen predicados (p. ej.
plus). plus: predicado/operador aritmético usado para sumar (p. ej.plus 3 2).- Sobrecarga de predicados: definir el mismo nombre con distinto número de argumentos.
- Base de conocimiento dinámica: capacidad de añadir/quitar hechos en tiempo de ejecución.
assert: añadir un hecho (o cláusula) a la base de conocimiento en ejecución.retract: quitar un hecho de la base de conocimiento en ejecución.- Sistema experto: programa basado en una base de conocimiento que razona y puede "aprender" nuevos hechos.
- Problema de la Zebra: acertijo de cinco casas que se resuelve con reglas y hechos; quién tiene la cebra / quién bebe agua.
7 Mapa mental textual
- Prolog en práctica: unificación, listas, aritmética y el problema de la Zebra · Clase 11
- Resolución y negación
- Se aplica igual con variables y constantes
- Negar la meta → cancelar literales opuestos → contradicción
- Entornos
- SWI-Prolog, Visual Prolog (visual), GNU Prolog
- Archivos
.pl·consult· compilación
- Predicados y programas de ejemplo
- Proposiciones (hechos y reglas)
- MariaGusta / regalos:
da(jaime, regalo, maria),recibe(maria, regalo) - Preguntas con variables: ¿a quién le da un regalo María? · ¿qué le gusta a María?
- Unificación
- Constante con constante igual · números con números
- Variable con cualquier valor → la sustitución la liga
- Variables locales/temporales (no globales)
- Problema de la Zebra
- Cinco casas · nacionalidades
- Reglas + hechos + combinaciones
- ¿Quién tiene la cebra? · ¿Quién bebe agua?
- Listas y aritmética
- Listas de términos
- No hay "la suma" como función → definir /
plus - Sobrecarga por número de argumentos
- Base de conocimiento dinámica
assert(añadir) /retract(quitar)- Sistemas expertos que aprenden
- Resolución y negación